#ifndef CRON_PARSER_H
#define CRON_PARSER_H

#include "common.h"

// Cron表达式字段
typedef enum {
    CRON_SECOND = 0,
    CRON_MINUTE = 1,
    CRON_HOUR = 2,
    CRON_DAY = 3,
    CRON_MONTH = 4,
    CRON_WEEKDAY = 5,
    CRON_YEAR = 6,
    CRON_FIELD_COUNT
} cron_field_t;

// Cron表达式结构
typedef struct {
    int seconds[60];      // 0-59
    int minutes[60];      // 0-59
    int hours[24];        // 0-23
    int days[32];         // 1-31
    int months[13];       // 1-12
    int weekdays[8];      // 0-7 (0和7都是周日)
    int years[100];       // 1970-2069
    char *timezone;       // 时区
    char *original_expr;  // 原始表达式
} cron_expr_t;

// Cron解析结果
typedef struct {
    bool matches;         // 是否匹配
    time_t next_time;     // 下一次执行时间
    time_t prev_time;     // 上一次执行时间
} cron_result_t;

// Cron解析器API
cron_expr_t *cron_parse(const char *expression);
void cron_free(cron_expr_t *expr);
bool cron_check_time(cron_expr_t *expr, time_t time);
time_t cron_next_time(cron_expr_t *expr, time_t after);
time_t cron_prev_time(cron_expr_t *expr, time_t before);
cron_result_t cron_check(cron_expr_t *expr, time_t time);

// 工具函数
int cron_field_to_int(const char *field, int min, int max, int *values, int *count);
bool cron_is_number(const char *str);
bool cron_is_range(const char *str);
bool cron_is_step(const char *str);
bool cron_is_list(const char *str);
bool cron_is_wildcard(const char *str);

#endif
